#include "ledwindow.h"
#include "ui_ledwindow.h"
#include <QGraphicsColorizeEffect>
#include <QDebug>
extern "C"
{

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>

}

LedWindow::LedWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::LedWindow)
{
    ui->setupUi(this);
    //1.在程序执行前必须确保你的驱动已经安装驱动
    //2.访问驱动设备
    fd = open("/dev/Led",O_RDWR);
    if(fd < 0)
        qDebug()<<"open fial";
    //3.初始化关闭所有灯光
    ioctl(fd,LED1,LED_OFF);
    ioctl(fd,LED2,LED_OFF);
    ioctl(fd,LED3,LED_OFF);
    ioctl(fd,LED4,LED_OFF);
}

LedWindow::~LedWindow()
{
    delete ui;
    ::close(fd);
}

//响应语音控制开灯--所有灯光
void LedWindow::led_win(int num)
{
    if(num == 1)//语音开灯--所有灯打开
    {
        flag1 = 0;flag2 = 0;flag3 = 0;flag4 = 0;
    }
//    else//语音关灯--所有灯关闭
//    {
//        flag1 = 1;flag2 = 1;flag3 = 1;flag4 = 1;
//    }
    //给所有灯按键发送一个点击信号
    ui->led1_btn->clicked();
    ui->led2_btn->clicked();
    ui->led3_btn->clicked();
    ui->led4_btn->clicked();

}

//点击开灯1
void LedWindow::on_led1_btn_clicked()
{
    if(flag1 == 0)//开灯
    {
        // 将颜色效果应用到按钮
        QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(this);
        effect->setColor(QColor(0, 255, 255)); // 天蓝色
        effect->setStrength(1.0);
        ui->led1_btn->setGraphicsEffect(effect);
        flag1 = 1;
        //开灯
        ioctl(fd,LED1,LED_ON);
    }
    else//关灯
    {
        // 将颜色效果应用到按钮
        ui->led1_btn->setGraphicsEffect(nullptr);
        flag1 = 0;
        //关灯
        ioctl(fd,LED1,LED_OFF);
    }
}

//点击开灯2
void LedWindow::on_led2_btn_clicked()
{
    if(flag2 == 0)//开灯
    {
        // 将颜色效果应用到按钮
        QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(this);
        effect->setColor(QColor(0, 255, 255)); // 天蓝色
        effect->setStrength(1.0);
        ui->led2_btn->setGraphicsEffect(effect);
        flag2 = 1;
        //开灯
        ioctl(fd,LED2,LED_ON);
    }
    else//关灯
    {
        // 将颜色效果应用到按钮
        ui->led2_btn->setGraphicsEffect(nullptr);
        flag2 = 0;
        //关灯
        ioctl(fd,LED2,LED_OFF);
    }
}

//点击开灯3
void LedWindow::on_led3_btn_clicked()
{
    if(flag3 == 0)//开灯
    {
        // 将颜色效果应用到按钮
        QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(this);
        effect->setColor(QColor(0, 255, 255)); // 天蓝色
        effect->setStrength(1.0);
        ui->led3_btn->setGraphicsEffect(effect);
        flag3 = 1;
        //开灯
        ioctl(fd,LED3,LED_ON);
    }
    else//关灯
    {
        // 将颜色效果应用到按钮
        ui->led3_btn->setGraphicsEffect(nullptr);
        flag3 = 0;
        //关灯
        ioctl(fd,LED3,LED_OFF);
    }
}

//点击开灯4
void LedWindow::on_led4_btn_clicked()
{
    if(flag4 == 0)//开灯
    {
        // 将颜色效果应用到按钮
        QGraphicsColorizeEffect* effect = new QGraphicsColorizeEffect(this);
        effect->setColor(QColor(0, 255, 255)); // 天蓝色
        effect->setStrength(1.0);
        ui->led4_btn->setGraphicsEffect(effect);
        flag4 = 1;
        //开灯
        ioctl(fd,LED4,LED_ON);
    }
    else//关灯
    {
        // 将颜色效果应用到按钮
        ui->led4_btn->setGraphicsEffect(nullptr);
        flag4 = 0;
        //关灯
        ioctl(fd,LED4,LED_OFF);
    }
}

//返回上个界面--功能界面--隐藏当前界面（保持灯和当前界面的状态），该界面只会创建一次
void LedWindow::on_return_btn_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();

    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
//    //关闭所有灯光
//    ioctl(fd,LED1,LED_OFF);
//    ioctl(fd,LED2,LED_OFF);
//    ioctl(fd,LED3,LED_OFF);
//    ioctl(fd,LED4,LED_OFF);
    this->hide();//隐藏当前界面
}
